package biblioGraphiqueV2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultListModel;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.SoftBevelBorder;

import java.util.HashMap;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JSeparator;
import javax.swing.JList;
import java.awt.Color;
import java.awt.Font;
/**
 * Fenêtre de consultation d'un ouvrage
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */

public class VueConsulterLecteur extends Vue {
	private Lecteur lecteur;

	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	private JTextField textFieldNom;
	private JTextField textFieldPrenom;
	private JTextField textFieldAdresse;
	private JTextField textFieldTelephone;
	private JTextArea textAreaEmprunt;
	private JTextArea textAreaReservation;
	private JList liste;
	private DefaultListModel model;

	// pour que les boutons soient des attributs, il faut faire "convert local to field"
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;
	private JLabel label;
	
	
	/**
	 * Create the frame.
	 */
	public VueConsulterLecteur(Controleur controleur) {
		super(controleur);
		setTitle("Consulter un lecteur");
		//setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 452, 633);
		contentPane = new JPanel();
		this.addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
			getControleur().fermerVue(VueConsulterLecteur.this);
			}
		});
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel_1 = new JLabel("Nom");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(39, 147, 61, 15);
		contentPane.add(lblNewLabel_1);
		
		textFieldNom = new JTextField();
		textFieldNom.setEditable(false);
		textFieldNom.setBounds(112, 145, 214, 19);
		contentPane.add(textFieldNom);
		textFieldNom.setColumns(10);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsulterLecteur.this);}
		});
		buttonAnnuler.setBounds(255, 98, 107, 25);
		contentPane.add(buttonAnnuler);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.setBounds(112, 98, 107, 25);
		contentPane.add(buttonRech);
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// liaison de la vue avec l'objet observé
				setLecteur(getControleur().rechLecteur((String)liste.getSelectedValue()));
		}});
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsulterLecteur.this);}
		});
		buttonFermer.setBounds(179, 569, 107, 25);
		contentPane.add(buttonFermer);
		
		textFieldPrenom = new JTextField();
		textFieldPrenom.setEditable(false);
		textFieldPrenom.setColumns(10);
		textFieldPrenom.setBounds(112, 176, 214, 19);
		contentPane.add(textFieldPrenom);
		
		JLabel lblAuteur = new JLabel("Prénom");
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblAuteur.setBounds(39, 178, 61, 15);
		contentPane.add(lblAuteur);
		
		textFieldAdresse = new JTextField();
		textFieldAdresse.setEditable(false);
		textFieldAdresse.setColumns(10);
		textFieldAdresse.setBounds(112, 207, 214, 19);
		contentPane.add(textFieldAdresse);	
		
		JLabel lblEditeur = new JLabel("Adresse");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(39, 209, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldTelephone = new JTextField();
		textFieldTelephone.setEditable(false);
		textFieldTelephone.setColumns(10);
		textFieldTelephone.setBounds(112, 238, 114, 19);
		contentPane.add(textFieldTelephone);
		
		JLabel lblDatedition = new JLabel("Téléphone");
		lblDatedition.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDatedition.setBounds(20, 240, 82, 15);
		contentPane.add(lblDatedition);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(112, 284, 250, 2);
		contentPane.add(separator);
		
		JLabel lblNewLabel_2 = new JLabel("Emprunts");
		lblNewLabel_2.setFont(new Font("Dialog", Font.BOLD | Font.ITALIC, 12));
		lblNewLabel_2.setBounds(197, 298, 107, 15);
		contentPane.add(lblNewLabel_2);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(29, 330, 399, 96);
		contentPane.add(scrollPane);
		
		textAreaEmprunt = new JTextArea();
		textAreaEmprunt.setEditable(false);
		scrollPane.setColumnHeaderView(textAreaEmprunt);
		
		JLabel lblNewLabel_3 = new JLabel("Réservation");
		lblNewLabel_3.setFont(new Font("Dialog", Font.BOLD | Font.ITALIC, 12));
		lblNewLabel_3.setBounds(188, 438, 81, 15);
		contentPane.add(lblNewLabel_3);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(29, 465, 399, 96);
		contentPane.add(scrollPane_1);
		
		textAreaReservation = new JTextArea();
		textAreaReservation.setEditable(false);
		scrollPane_1.setColumnHeaderView(textAreaReservation);
		
		label = new JLabel("Numero Lecteur : ");
		label.setHorizontalAlignment(SwingConstants.RIGHT);
		label.setBounds(-17, 8, 243, 15);
		contentPane.add(label);
		//////////////////////////////////////////////////////////////////////////////////////////////////////////
		model = new DefaultListModel();
		alimenteListeLec();
		liste = new JList(model);
		liste.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, new Color(0, 0, 0), null, null, null));
		liste.setSelectionMode(0);
		liste.setBounds(234, 7, 175, 79);
		contentPane.add(liste);
		
		JScrollPane scrollPane_2 = new JScrollPane(liste);
		scrollPane_2.setBounds(231, 8, 178, 82);
		contentPane.add(scrollPane_2);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(58, 135, 340, 2);
		contentPane.add(separator_1);
		}
	
	/**
	 * alimentation des composants d'affichage en consultant directement le lecteur
	 */
	public void alimenteLecteur(Lecteur lec) 
	{
			textFieldNom.setText(lec.getNom());
			textFieldPrenom.setText(lec.getPrenom());
			textFieldAdresse.setText(lec.getAdresse());
			textFieldTelephone.setText (lec.getTel());
	}
	
	/**
	 * alimentation des composants d'affichage en consultant directement le lecteur
	 */
	public void alimenteEmprunt(HashMap<Integer, Emprunt> emprunt){
		int emppresent = 0;
		if (emprunt == null) {
			textAreaEmprunt.append("Ce lecteur n'a emprunté aucun exemplaire");
		}
		else {
			for (Integer mapKey : emprunt.keySet()) {
				textAreaEmprunt.append("Isbn : " + emprunt.get(mapKey).getExemplaire().getOuvrage().getIsbn() + " Titre : " + emprunt.get(mapKey).getExemplaire().getOuvrage().getTitre() + 
					" Numéro exemplaire :" + emprunt.get(mapKey).getExemplaire().getNumero() + "\n");
				emppresent++;
			}
			if(emppresent == 0) {
				textAreaEmprunt.append("Ce lecteur n'a emprunté aucun exemplaire");
			}
		}
	}
	
	/**
	 * alimentation des composants d'affichage en consultant directement le lecteur
	 */
	public void alimenteReservation(HashMap<Integer, Reservation> res){
		int respresent = 0;
		if (res == null) {
			textAreaReservation.append("Ce lecteur n'a réservé aucun ouvrage");
		}
		else {
			for (Integer mapKey : res.keySet()) {
				textAreaReservation.append("Isbn : " + res.get(mapKey).getOuvrage().getIsbn() + " Titre : " + res.get(mapKey).getOuvrage().getTitre() + "\n");
				respresent++;
			}
			if(respresent == 0) {
				textAreaReservation.append("Ce lecteur n'a réservé aucun ouvrage");
			}
		}
	}
	
	public void alimenteListeLec(){
		HashMap<String, Lecteur> lec;
		lec = getControleur().getLecteurs();
		
		Vector<String> vec = new Vector<String>(); 

		for (String mapKey : lec.keySet()) {
			String num = lec.get(mapKey).getNumLecteur();
			vec.add(num);
		}
		
		for(int i = vec.size()-1 ; i >= 0 ; i--)
		{
			model.addElement(vec.elementAt(i));
		}
	}	
	
	private void setLecteur(Lecteur lect) {
		 lecteur = lect;
	}
	private Lecteur getLecteur(){
		return lecteur;
	}
	
	
	/*
	 * Définition des états de la fenêtre, c'est à dire, des régions actives selon l'état.
	 */
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonRech.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			buttonFermer.setEnabled(false);
			break;
			}
		case finale: {
			buttonRech.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonFermer.setEnabled(true);
			break;
			}
		}
	}
	
}